<!DOCTYPE html>
<html lang="en">

<head>
    <meta charset="UTF-8">
    <meta http-equiv="X-UA-Compatible" content="IE=edge">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <title>Document</title>
    <script src="../js/vue.js"></script>
</head>

<body>
    <div id="demo">

    </div>
    <script>
        const Hello = Vue.extend({
            name: 'Hello',
            template: `
            <div>
                <h3>Hello组件</h3>
                <p>hi, 你好！</p>
            </div>
            `
        })
        const Student = Vue.extend({ // VueComponent  VC
            name: 'Student',// 名字是在控制台中显示的，首字母大小写都可以，但是显示最终都是大写
            components: { Hello },
            data() {
                return {
                    name: '老张',
                    age: 20
                }
            },
            methods: {
                addAge() {
                    // this 就是小vc
                    this.age += 1
                }
            },
            template: `
                <div>
                    <h3>学生</h3>
                    <p>name:{{name}}</p>
                    <p>age: {{age}}</p>
                    <p><button @click="addAge">age++</button></p>
                    <hr/>
                    <Hello/>
                </div>
                `
        })

        const School = Vue.extend({// VueComponent
            name: 'School',
            components: { Hello },
            data() {
                return {
                    name: '尚硅谷',
                    address: '宏福科技园'
                }
            },
            template: `
            <div>
                <h3>学校组件</h3>
                <p>name:{{name}}</p>
                <p>address:{{address}}</p>
                <p><button @click="address+='!'">address+ '!'</button></p>
                <hr/>
                <Hello/>
            </div>
            `
        })

        const App = Vue.extend({ // VueComponent
            name:'App',
            components: {
                Student,
                School
            },
            template:`
                <div>
                    <Student/>
                    <School/>
                </div>
            `
        })

        Vue.config.productionTip = false
        new Vue({
            el: '#demo',
            components: {
                App
            },
            data: {},
            template: `
                    <App/>
                `
        })

        /**
         *  Vue 构造函数
         *  vm : Vue实例的对象
         *  VueComponent : 组件构造函数
         *  vc : 组件实例对象 ==> 组件标签调用时， Vue 帮我们new的
         * 
         *  每一个函数都有一个天生存在的属性 prototype， 指向它的原型对象
         *  每一个对象都有一个天生自带的属性 __proto__, 指向所属类[构造函数]的原型
         */

         console.log(Vue.prototype.__proto__)


        //  非单文件组件
        //  单文件组件：一个文件就是一个组件
    </script>
</body>

</html>